package zmee.pmas.opplugin;

import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.ExtendedDataEntity;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.AddValidatorsEventArgs;
import kd.bos.entity.plugin.PreparePropertysEventArgs;
import kd.bos.entity.validate.AbstractValidator;
import kd.bos.entity.validate.ErrorLevel;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import zmee.common.allhelper.OccupiedAmountCalculateHelper;

import java.math.BigDecimal;

/**
 * @author yss
 * @createTime 2022-11-30 14:33
 * @description 项目支出预算提交扩展插件
 */
public class OutBudgetSubmitOpEx extends AbstractOperationServicePlugIn {

    @Override
    public void onPreparePropertys(PreparePropertysEventArgs e) {
        e.getFieldKeys().add("totalamount");
        e.getFieldKeys().add("project");
        e.getFieldKeys().add("zmee_textfield");
        e.getFieldKeys().add("year");
    }

    @Override
    public void onAddValidators(AddValidatorsEventArgs e){
        e.addValidator(new AbstractValidator(){
            @Override
            public void validate(){
                ExtendedDataEntity[] dataEntities = this.getDataEntities();
                for(ExtendedDataEntity dataEntity : dataEntities){
                    totalamountCheck(dataEntity);
                }
            }

 //                    1.1、以前年度历史占用  来源逻辑：
//                    经营分析 -》 项目支出预算执行监控列表
//                    根据 项目 获取已占用金额 -》 获取到往年的占用金额
//                    1.2、项目概算总额  来源逻辑：
//                    项目立项单 项目投资预算总额/项目概算（元） 字段
//                    1.3、年度财务预算   来源逻辑：
//                    取值EAS年度财务预算

            /**
             * 年度项目支出预算总额 + 以前年度历史占用小于等于项目概算总额（1+10%）
             * 如果大于提示：“超过项目概算，请变新增项目概算”
             * @param extendedDataEntity
             */
            protected void totalamountCheck(ExtendedDataEntity extendedDataEntity){
                DynamicObject dataEntity = extendedDataEntity.getDataEntity();
                /* 1、年度项目支出预算总额 */
                BigDecimal totalamount = dataEntity.getBigDecimal("totalamount");
                /*
                 * 2、以前年度历史占用  来源逻辑
                 * 经营分析 -》 项目支出预算执行监控列表
                 * 根据 项目 获取已占用金额 -》 获取到往年的占用金额
                */
                DynamicObject projectDy = dataEntity.getDynamicObject("project");
                if(projectDy == null){
                    this.addErrorMessage(extendedDataEntity,"项目名称不能为空");
                    return;
                }
                BigDecimal decimal = dataEntity.getBigDecimal("totalamount");//项目年度概算
                String fisum = dataEntity.getString("zmee_textf");//年度财务预算
                String txt="";
                if("".equals(fisum) || fisum==null || decimal.compareTo(new BigDecimal(fisum))!=0){
                    txt="年度财务预算不等于年度项目预算，现需审批至环能;";
                }
                String name = projectDy.getString("name");
                if(!name.contains("公共")) {
                    BigDecimal occupiedAmount = OccupiedAmountCalculateHelper.calculateBeforeThisDateOccupiedAmountCalculate(projectDy.getLong("id"), dataEntity.getDate("year"));
                    
                    /* 3、年度项目概算总额 */
                    BigDecimal projcetBugAmt = dataEntity.getBigDecimal("zmee_textfield");
                    /* 4、判断 */
                    //年度项目支出预算总额 + 以前年度历史占用
                    BigDecimal totalAmt = totalamount.add(occupiedAmount);
                   // totalAmt.subtract(new BigDecimal("1.13"));
                    if (totalAmt.compareTo(projcetBugAmt) > 0) {
                        if(!"".equals(txt)){
                            txt=txt+"\n超过项目概算，请变更新增项目概算;";
                        }else{
                            txt="超过项目概算，请变更新增项目概算;";
                        }
                    }
                }
                if(!"".equals(txt)){
                    this.addMessage(extendedDataEntity, txt,ErrorLevel.Warning);
                }
            }
        });
    }
}
